﻿using System;
using System.Data.SqlClient;
using System.Reflection; //For Missing.Value 

namespace ExportToExcel
{
   
    using Excel = Microsoft.Office.Interop.Excel;

    class ExcelAutomation
    {
        //DataSet 

        public void CreateExcelFile(string filename)
        {

            System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");
            Excel.Application excelApp = new Excel.Application();
            Excel.Workbook book = null;
            Excel.Worksheet folha = null;
            Excel.Range celulas = null;

            try
            {
                excelApp.SheetsInNewWorkbook = 1;
                book = excelApp.Workbooks.Add(Missing.Value);
                folha = (Excel.Worksheet)book.Worksheets[1];

                folha.Cells[1, 1] = "Detecção de Conflitos";
                folha.Cells[2, 1] = "UC1";
                folha.Cells[2, 2] = "Turno";
                folha.Cells[2, 3] = "UC2";
                folha.Cells[2, 4] = "Turno";
                folha.Cells[2, 5] = "Dia Colisão";
                folha.Cells[2, 6] = "Hora Colisão";
                folha.Cells[2, 3] = "Total Alunos em Colisão";


                //obter um range de células
                celulas = folha.get_Range("A3", "C8");
                int i = 1;
                foreach (Excel.Range var in celulas)
                {
                    var.Value2 = i++;
                }

                //CRIAR UM GRAFICO NO EXCEL

                //****************************************************************
                //Obtem todos os gráficos da folha
                Excel.ChartObjects chartObjects = (Excel.ChartObjects)folha.ChartObjects(Missing.Value);

                //Adiciona um novo gráfico nas coordenadas indicadas
                Excel.ChartObject grafico = chartObjects.Add(200, 100, 300, 300);

                //obtem a informação para o gráfico
                Excel.Range range = folha.get_Range(folha.Cells[3, 1], folha.Cells[8, 2]);

                grafico.Chart.ChartType = Microsoft.Office.Interop.Excel.XlChartType.xl3DColumn;
                grafico.Chart.SetSourceData(range, Excel.XlRowCol.xlColumns);

                grafico.Chart.HasTitle = true;
                grafico.Chart.ChartTitle.Text = "Teste de Grafico";


                book.SaveAs(filename, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
                book.Close(true, Missing.Value, Missing.Value);
                excelApp.Quit();
                Console.WriteLine("Terminou");

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            finally
            {
                if (excelApp != null)
                {
                    //System.Runtime.InteropServices.Marshal.ReleaseComObject(celulas);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(folha);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(book);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
                    GC.Collect();
                }
            }//try
        }

    }

}
